'use strict';

module.exports = function() {
  return async function(ctx, next) {
    ctx.logger.info('*****************0*****************');

    if (/api\/v1\/logout/.test(ctx.req.url)) {
      ctx.logger.info('*****************1*****************');
      await next();
      return ctx.body;
    } else if ((ctx.session && ctx.session.csrfToken) || (/api\/v1\/captch/.test(ctx.req.url))) {
      try {
        if (ctx.req.method === 'GET' && !(/api\/v1\/captch/.test(ctx.req.url))) {
          ctx.assertCsrf();
        }
      } catch (err) {
        ctx.logger.info('*****************2*****************');
        return ctx.throw(403);
      }

      if ((/api\/v1\/captch/.test(ctx.req.url))) {
        ctx.ensureCsrfSecret();
      }

      ctx.cookies.set('csrfToken', ctx.session.csrfToken, {
        httpOnly: false, // 默认就是 true
        encrypt: false, // 加密传输
      });

      await next();
      return ctx.body;
    } else {
      ctx.logger.info('*****************3*****************');
      return ctx.throw(403);
    }
  }; 
}
